generate 를 하고나면,
1 | ./byfn.sh up -o etcdraft -s couchdb -l node |
위의 명령어를 통해서 fabric network 를 up 합니다.
db는 couch db를 이용하고, chaincode는 node js 로 작성할거다.
BYFN의 프로세스
- 5개의 오더링 서비스 노드, 4개의 피어 노드 총 9개의 노드 컨테이너., CLI 컨테이너, 각 조직의 ca 컨테이너( 총 2개), 4개의 couchdb 컨테이너 가 실행되며, 총 16개의 컨테이너가 먼저 실행된다.
- 네트워크 내부의 CLI 컨테이너에 접속해 생성된 채널 트랜잭션 파일인 channel.tx를 가지고 채널을 생성하고 채널 ufochannel을 생성하고 모든 피어노드를 가입시킨다.
- 두 조직의 peer0을 앵커로 가입한다
위의 과정을 구현하기 위해서 필요한 파일은
- docker-compose-ca.yaml
- docker-compose-cli.yaml
- docker-compose-couch.yaml
- docker-compose-etcdraft2.yaml
- docker-compose-base.yaml
- peer-base.yaml
들을 만질 것 이다.
docker-compose-ca.yaml
- CA는 MSP에서 암호화 인증을 위해 필요한 인증기관이며, 공개키 인증서 및 이에 대응하는 개인키를 발급한다. 블록체인 네트워크를 구성하는 조직에게는 루트 인증서를, 블록체인 네트워크에 접속하는 사용자에게는 신원등록 인증서를 발급한다.
1 |
|
- network는 byfn이고 services 로 ca0, ca1이 있다.
- ca0 은 sales 조직을 서비스하고, ca1은 customer 조직을 서비스한다.
docker-compose-cli.yaml
- volumes
1 | volumes: |
먼저 docker-compose-cli파일의 volumes 이다.
- docker volume이란?
- container의 데이터 휘발성 때문에 데이터를 container가 아닌 호스트에 저장할 때, 또는 container 끼리 데이터를 공유할때 Volume을 사용.
- ca
1 | ca.sales.ufo.com: |
위는 ca.sales.ufo.com을 설정하는 부분이다. ca.customer.ufo.com도 위에서 sales를 customer로 바꿔주면 된다.
order
1
2
3
4
5
6
7orderer.ufo.com:
extends:
file: base/docker-compose-base.yaml
service: orderer.ufo.com
container_name: orderer.ufo.com
networks:
- byfnraft 의 핵심! 오더러 설정 부분이다. 나는 다섯개의 오더러를 설정했으므로,
1
2
3
4
5
6
7orderer2.ufo.com:
extends:
file: base/docker-compose-base.yaml
service: orderer2.ufo.com
container_name: orderer2.ufo.com
networks:
- byfn이런식으로 orderer3, orderer4, orderer5 를 더 만들어 준다.
peer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16peer0.sales.ufo.com:
container_name: peer0.sales.ufo.com
extends:
file: base/docker-compose-base.yaml
service: peer0.sales.ufo.com
networks:
- byfn
peer1.sales.ufo.com:
container_name: peer1.sales.ufo.com
extends:
file: base/docker-compose-base.yaml
service: peer1.sales.ufo.com
networks:
- byfn
sales 조직에 대한 peer0, peer1을 설정하고 위 설정에서 sales를 customer로 바꾸면 customer 설정이다.
cli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41cli:
container_name: cli
image: hyperledger/fabric-tools:$IMAGE_TAG
tty: true
stdin_open: true
environment:
- SYS_CHANNEL=$SYS_CHANNEL
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- FABRIC_LOGGING_SPEC=DEBUG
- FABRIC_LOGGING_SPEC=INFO
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.sales.ufo.com:7051
- CORE_PEER_LOCALMSPID=SalesMSP
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/sales.ufo.com/peers/peer0.sales.ufo.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/sales.ufo.com/peers/peer0.sales.ufo.com/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/sales.ufo.com/peers/peer0.sales.ufo.com/tls/ca.crt
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/sales.ufo.com/users/Admin@sales.ufo.com/msp
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash
volumes:
- /var/run/:/host/var/run/
- ./../chaincode/:/opt/gopath/src/github.com/chaincode
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
depends_on:
- orderer.ufo.com
- orderer2.ufo.com
- orderer3.ufo.com
- orderer4.ufo.com
- orderer5.ufo.com
- peer0.sales.ufo.com
- peer1.sales.ufo.com
- peer0.customer.ufo.com
- peer1.customer.ufo.com
- ca.sales.ufo.com
- ca.customer.ufo.com
networks:
- byfn위에는 cli 설정이다. cli 컨테이너는 위에서 설정해준 모든 컨테이너에 의존한다.
docker-compose-couch.yaml
couchdb 설정 yaml 파일이다. 여기서 구성한 네트워크에서는 총 4개의 couchdb 컨테이너가 있는데,
각각의 컨테이너는
couchdb0 : peer0.sales.ufo.com
couchdb1 : peer1.sales.ufo.com
couchdb2 : peer0.customer.ufo.com
couchdb3 : peer1.customer.ufo.com
에 대응한다.
예시로 여기서는 couchdb0의 설정만 올리겠다.
1 | services: |
docker-compose-etcdraft2.yaml
여기서는 raft를 위해 orderer를 제외하고 나머지 orderer2, orderer3, orderer4, orderer5를 설정한다.
1 | volumes: |
이 파일 또한 예시로 orderer2.ufo.com 만 첨부 하겠다.
1 | orderer2.ufo.com: |
docker-compose-base.yaml
이름 그대로, docker-compose의 base가 되는 yaml 설정 파일이다.
1 | orderer.ufo.com: |
orderer.ufo.com 을 예시로 들었다. 전체 코드는 git에서 확인 할 수 있다.
peer-base.yaml
이 파일에서는 peer-base, orderer-base의 환경변수 설정등을 한다.
자세한 파일 내용은 git에서 확인 할 수 있다.
- 전체 코드 GIT : https://github.com/yuminee/UFO_FabricNet_raft